import Vue from "vue";
export default {
	namespaced: true, // 命名空间必须写
	state: {
		isLogin: uni.getStorageSync('isLogin') || false, // 是否登录
		userInfo: uni.getStorageSync('userInfo') || {}, // 用户信息
		orderTotal: {},
		user_type: 1, // 用户类型 1-用户 2-游客
		couponList: [],
		integralProductList: [], //积分商城商品列表
		integrationLoading: true //积分商城商品列表加载状态
	},
	getters: {
		getState(state) {
			return state;
		}
	},
	// 唯一修改state值的方法 
	// commit
	mutations: {
		setUserInfo(state, value) {
			state.userInfo = value;
			Vue.prototype.$setCache('userInfo', state.userInfo)
		},
		setIsLogin(state, value) {
			state.isLogin = value;
			Vue.prototype.$setCache('isLogin', value)
		},
		setOrderTotal(state, val) {
			state.orderTotal = val
		},
		setUserType(state, val) {
			state.user_type = val;
		},
		setCouponList(state, val) {
			state.couponList = val;
		},
		setIntegralProductList(state, val) {
			state.integralProductList = val;
		},
		setIntegrationLoading(state, val) {
			state.integrationLoading = val;
		},
	},
	// 异步的操作
	actions: {
		// 获取用户信息
		getUserInfo({
			dispatch,
			commit,
		}, loadType = 2) {
			Vue.prototype.$get("user/getUserInfo").then(res => {
				if (res.code == 200) {
					dispatch('getOrderTotal')
					// 设置用户数据
					commit('setUserInfo', res.data.userInfo);
					if (loadType == 1) { // 用户数据初次加载
						if (res.data.userInfo) {
							// 更改登录状态
							commit('setIsLogin', true);
							// 获取购物车总数
							dispatch('shopCart/getShopCartNumber', {}, {
								root: true
							});
							// 获取推荐商品
							dispatch('guessRecommend/getRecommendList', {}, {
								root: true
							});
						}
					}
					Vue.prototype.$isResolve();
				} else {
					uni.removeStorageSync('token');
				}
			}).catch(ex => {
				Vue.prototype.$errorToast(ex);
			})
		},
		// 获取消息
		getOrderTotal({
			dispatch,
			commit,
		}, activity_type) {
			Vue.prototype.$get("order/getOrderTotal", {
				activity_type: activity_type == 1 ? activity_type : ''
			}).then(res => {
				commit('setOrderTotal', res.data.orderTotal);
				dispatch('getIntegralProductList')
			}).catch(ex => {
				Vue.prototype.$errorToast(ex);
			})
		},
		// 获取券包列表
		// getCouponPackageList({
		// 	dispatch,
		// 	commit,
		// }) {
		// 	Vue.prototype.$get("productCouponPackage/allList").then(res => {
		// 		commit('setCouponList', res.data);
		// 	}).catch(ex => {
		// 		Vue.prototype.$errorToast(ex);
		// 	})
		// },
		// 获取积分商城商品列表
		getIntegralProductList({
			dispatch,
			commit,
		}) {
			Vue.prototype.$get("integralProduct/list", {
				status: 1,
				type: 10
			}).then(res => {
				commit('setIntegrationLoading', false);
				commit('setIntegralProductList', res.data.data);
			}).catch(ex => {
				Vue.prototype.$errorToast(ex);
			})
		},
		// 获取是否登录
		getIsLogin({
			commit
		}) {
			if (uni.getStorageSync('token')) { // 已登录
				commit('setIsLogin', true);
			} else { // 未登录
				commit('setIsLogin', false);
			}
		},
		// 退出登录
		userOutLogin({
			commit,
			dispatch
		}) {
			// 清除用户登录缓存
			Vue.prototype.$removeAllUserStorage();
			// 设置用户数据
			commit('setUserInfo', {});
			// 设置用户数据
			commit('setIsLogin', false);
			dispatch('init/getInit', {}, {
				root: true
			});
			// // 关闭websocket
			// dispatch('socket/websocketClose', {}, {
			// 	root: true
			// });
			// // 清空消息总数
			// commit('socket/setMessageTotal', 0, {
			// 	root: true
			// });
			// 清空购物车总数
			commit('shopCart/setShopCartNumber', 0, {
				root: true
			});
			// 清空购物车是否修改
			commit('shopCart/setIsUpdate', false, {
				root: true
			});
		},
	}
}